let a = 10;
a = a + 5; // 和下面是一样的 a = 15
a += 5; // 15 + 5
console.log(a);

let n = 1;
// n = n +1 这里++n 和 n++ 当你在不参与表达式运算的时候都是一样的
let f = 2;
let d = f + n++; // 先算大的表达式，即 d = f + n, 然后n自己再加1
console.log(d);
console.log(n); // 2

let e = f + ++n; // 先算n在和 f 相加，上面可得 n = 2 所以 n再加1 之后再去和f相加
console.log(e); // 5
console.log(n); // 3

// 比较运算符 逻辑运算符 短路运算

let num = 6;
let bignum = num || 10; // 这个短路运算会将为true的那个值赋值给bignum 并不是两者的运算结果 1
console.log(bignum);

function star(num = 5) {
  return "*".repeat(num);
}

console.log(star(3));

// 当你输入咯notice的时候，进入第一个case 但是并没有breka 所以会继续执行，这时候并不会看第二个case是否满足照样执行直到遇到break
let error = "notice";
switch (error) {
  case "notice":
  case "warning":
    console.log("提示或警告消息");
    break;
  case "error":
  default:
    console.log("错误消息");
}

function message(age) {
  let msg = "";
  switch (true) {
    case age > 60:
      msg = "老年";
      break;
    case age > 40:
      msg = "中年";
      break;
    case age > 20:
      msg = "青年";
      break;
    default:
      msg = "请输入有效年龄";
  }
  return msg;
}

console.log(message(30));

// breka 和 continue, break默认跳出当前循环，也可以指定，指定的时候需要标记
// continue是跳出本次循环，进行下一次循环
houdunren: for (let i = 1; i <= 10; i++) {
  hdcms: for (let n = 1; n <= 10; n++) {
    if (n % 2 == 0) console.log(i, n);
    if (n + i > 10) break houdunren;
  }
}

// for in 是取下标或者是对象属性, for of 是取值
const arr = ["jason", "Micheal", "Poroh"];
for (const v in arr) {
  console.log(v);
}
for (const key of arr) {
  console.log(key);
}

const obj = {
  name: "jason",
  age: 30,
};

for (const v in obj) {
  console.log(obj[v]); // 取得是obj的属性
}
